package com.cskaoyan.service;

import com.cskaoyan.bean.PO.MarketAd;
import com.cskaoyan.bean.PO.MarketAdExample;
import com.cskaoyan.bean.common.BasePageInfo;
import com.cskaoyan.bean.common.CommonData;
import com.cskaoyan.mapper.MarketAdMapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

/**
 * @author wenkaikai
 * @since 2022/08/13 11:16
 */
@Service
@Transactional
public class AdminAdServiceImpl implements AdminAdService{

    @Autowired
    MarketAdMapper marketAdMapper;

    @Override
    public CommonData<MarketAd> queryAdList(BasePageInfo info, String name, String content) {
        MarketAdExample example = new MarketAdExample();

        // 都不为空，拼接上order by 条件
        if (info.getSort() != null && info.getOrder() != null) {
            example.setOrderByClause(info.getSort() + " " + info.getOrder());
        }
        MarketAdExample.Criteria criteria = example.createCriteria();
        // 不为空，拼接上查询条件
        if (name != null && !"".equals(name)) {
            criteria.andNameLike("%" + name + "%");
        }
        if (content != null && !"".equals(content)) {
            criteria.andContentLike("%" + content + "%");
        }
        // 查询前开启分页
        PageHelper.startPage(info.getPage(), info.getLimit());
        List<MarketAd> marketAds = marketAdMapper.selectByExample(example);
        // 查询结果交给分页工具处理
        PageInfo<MarketAd> marketAdPageInfo = new PageInfo<>(marketAds);
        CommonData data = CommonData.data(marketAdPageInfo);
        return data;
    }

    @Override
    public MarketAd insertAdminAdAndGetResult(MarketAd record) {
        // 设置创建时间和更新时间
        Date date = new Date();
        record.setAddTime(date);
        record.setUpdateTime(date);
        // 此时只有id是空，其他都是有参数的，再把id封装回来就得到了
        int code = marketAdMapper.insertSelective(record);
        if(code == 1){
            return record;
        }
        return null;
    }

    /**
     * 把对应的 deleted 位修改成true
     * 还有更新时间设置为当前时间
     * 还有启用位置设置成enbled 改成false
     * @param marketAd
     * @return
     */
    @Override
    public int deleteAdminAd(MarketAd marketAd) {
        // 有选择的更新创建一个对象，把需要修改的内容放入，不需要的内容不设置
        Date date = new Date();
        MarketAd marketAdForUpdate = new MarketAd();
        marketAdForUpdate.setUpdateTime(date);
        marketAdForUpdate.setId(marketAd.getId());
        marketAdForUpdate.setDeleted(true);
        marketAdForUpdate.setEnabled(false);
        int code = marketAdMapper.updateByPrimaryKeySelective(marketAdForUpdate);
        return code;
    }

    /**
     *  更新广告
     *  有选择的更新，因为startTime并没有传入，所以采取默认值
     *  修改一个地方，更新时间
     *  其他保持前端参数
     *
     * @param marketAd
     * @return
     */
    @Override
    public int updateAd(MarketAd marketAd) {
        Date date = new Date();
        marketAd.setUpdateTime(date);
        if(marketAd.getEnabled()){
            // 如果启用了，则把逻辑删除去掉，设置为fasle
            marketAd.setDeleted(false);
        }
        int code = marketAdMapper.updateByPrimaryKeySelective(marketAd);
        return code;
    }
}